const { userCollection, inviteCollection } = require('./model')
const uniID = require('uni-id-common')

module.exports = {
  async login(params) {
    // 在云函数中获取uniId上下文
    const uniIdContext = uniID.createInstance({
      context: this.getClientInfo()
    })
    
    // 获取前端传递的用户信息
    const { code, userInfo, inviteUserId } = params
    
    try {
      // 1. 获取微信openid
      const loginRes = await uniIdContext.loginByWeixin({
        code
      })
      
      if (loginRes.code !== 0) {
        return loginRes
      }
      
      const { uid, token, tokenExpired } = loginRes
      
      // 2. 更新或创建用户信息
      const updateData = {
        nickname: userInfo.nickName,
        avatar_url: userInfo.avatarUrl,
        gender: userInfo.gender,
        updated_at: Date.now()
      }
      
      const userRecord = await userCollection.doc(uid).get()
      
      // 如果用户不存在，需要初始化
      if (!userRecord.data || userRecord.data.length === 0) {
        // 新用户初始化
        updateData.points = 0
        updateData.answer_cards = 5  // 新用户送5张答题卡
        updateData.created_at = Date.now()
        
        // 处理邀请关系
        if (inviteUserId && inviteUserId !== uid) {
          try {
            // 记录邀请关系
            await inviteCollection.add({
              inviter_id: inviteUserId,
              invitee_id: uid,
              created_at: Date.now()
            })
            
            // 给邀请人发放奖励(2张答题卡)
            await userCollection.doc(inviteUserId).update({
              answer_cards: this.db.command.inc(2)
            })
          } catch (e) {
            console.error('处理邀请关系失败:', e)
          }
        }
        
        // 创建用户记录
        await userCollection.doc(uid).set(updateData)
      } else {
        // 更新已有用户记录
        await userCollection.doc(uid).update(updateData)
      }
      
      // 3. 返回登录结果和用户信息
      const userResult = await userCollection.doc(uid).get()
      
      return {
        code: 0,
        message: '登录成功',
        uid,
        token,
        tokenExpired,
        userInfo: userResult.data[0]
      }
    } catch (e) {
      console.error('登录异常:', e)
      return {
        code: -1,
        message: '登录失败: ' + e.message
      }
    }
  },
  
  async getUserInfo() {
    // 在云函数中获取uniId上下文
    const uniIdContext = uniID.createInstance({
      context: this.getClientInfo()
    })
    
    // 获取当前用户token信息
    const payload = await uniIdContext.checkToken(this.getClientInfo().uniIdToken)
    if (payload.code !== 0) {
      return payload
    }
    
    try {
      // 查询用户信息
      const userInfo = await userCollection.doc(payload.uid).get()
      
      if (!userInfo.data || userInfo.data.length === 0) {
        return {
          code: -1,
          message: '用户信息不存在'
        }
      }
      
      return {
        code: 0,
        message: '获取成功',
        userInfo: userInfo.data[0]
      }
    } catch (e) {
      return {
        code: -1,
        message: '获取用户信息失败: ' + e.message
      }
    }
  },
  
  async getInviteStats() {
    // 在云函数中获取uniId上下文
    const uniIdContext = uniID.createInstance({
      context: this.getClientInfo()
    })
    
    // 获取当前用户token信息
    const payload = await uniIdContext.checkToken(this.getClientInfo().uniIdToken)
    if (payload.code !== 0) {
      return payload
    }
    
    try {
      // 统计邀请人数
      const countResult = await inviteCollection.where({
        inviter_id: payload.uid
      }).count()
      
      return {
        code: 0,
        message: '获取成功',
        stats: {
          count: countResult.total,
          cards: countResult.total * 2  // 每邀请1人获得2张答题卡
        }
      }
    } catch (e) {
      return {
        code: -1,
        message: '获取邀请统计失败: ' + e.message
      }
    }
  }
} 